#include "stepper.h"
#include "IO.h"
STRSTEPPERType g_steps_stRegs;
void fnStepper_Init(void){
	memset(&g_steps_stRegs, 0, sizeof(g_steps_stRegs));
	SET_IO_LOW(STEPPER_IO_1_PORT, STEPPER_IO_1_PIN);
	SET_IO_LOW(STEPPER_IO_2_PORT, STEPPER_IO_2_PIN);
	SET_IO_LOW(STEPPER_IO_3_PORT, STEPPER_IO_3_PIN);
	SET_IO_LOW(STEPPER_IO_4_PORT, STEPPER_IO_4_PIN);
}
void fnStepper_ReqRun(U8 on){
	g_steps_stRegs.run.on = on;
	g_steps_stRegs.run.steps = 270;
	g_steps_stRegs.run.duration = 3;
	g_steps_stRegs.run.state = 0;
	g_steps_stRegs.run.substate = 0;
	g_steps_stRegs.run.subtimer = 0;
	g_steps_stRegs.run.timer = 0;
	g_steps_stRegs.run.running = TRUE;
}
void fnStepper_Con(U8 on){
	if(g_steps_stRegs.curtainstatus != on){
		fnStepper_ReqRun(on);
		g_steps_stRegs.curtainstatus = on;
	}
}
void fnStepper_ISR(void){
	if(g_steps_stRegs.run.running){
		g_steps_stRegs.run.subtimer++;
		if(g_steps_stRegs.run.subtimer >= g_steps_stRegs.run.duration){
			g_steps_stRegs.run.subtimer = 0;
			if(g_steps_stRegs.run.on){
				if(g_steps_stRegs.run.substate == 0){
					SET_IO_HIGH(STEPPER_IO_1_PORT, STEPPER_IO_1_PIN);
					SET_IO_LOW(STEPPER_IO_2_PORT, STEPPER_IO_2_PIN);
					SET_IO_LOW(STEPPER_IO_3_PORT, STEPPER_IO_3_PIN);
					SET_IO_LOW(STEPPER_IO_4_PORT, STEPPER_IO_4_PIN);
				}
				if(g_steps_stRegs.run.substate == 1){
					SET_IO_LOW(STEPPER_IO_1_PORT, STEPPER_IO_1_PIN);
					SET_IO_HIGH(STEPPER_IO_2_PORT, STEPPER_IO_2_PIN);
					SET_IO_LOW(STEPPER_IO_3_PORT, STEPPER_IO_3_PIN);
					SET_IO_LOW(STEPPER_IO_4_PORT, STEPPER_IO_4_PIN);
				}
				if(g_steps_stRegs.run.substate == 2){
					SET_IO_LOW(STEPPER_IO_1_PORT, STEPPER_IO_1_PIN);
					SET_IO_LOW(STEPPER_IO_2_PORT, STEPPER_IO_2_PIN);
					SET_IO_HIGH(STEPPER_IO_3_PORT, STEPPER_IO_3_PIN);
					SET_IO_LOW(STEPPER_IO_4_PORT, STEPPER_IO_4_PIN);
				}
				if(g_steps_stRegs.run.substate == 3){
					SET_IO_LOW(STEPPER_IO_1_PORT, STEPPER_IO_1_PIN);
					SET_IO_LOW(STEPPER_IO_2_PORT, STEPPER_IO_2_PIN);
					SET_IO_LOW(STEPPER_IO_3_PORT, STEPPER_IO_3_PIN);
					SET_IO_HIGH(STEPPER_IO_4_PORT, STEPPER_IO_4_PIN);
				}
			}else{
				if(g_steps_stRegs.run.substate == 0){
					SET_IO_LOW(STEPPER_IO_1_PORT, STEPPER_IO_1_PIN);
					SET_IO_LOW(STEPPER_IO_2_PORT, STEPPER_IO_2_PIN);
					SET_IO_LOW(STEPPER_IO_3_PORT, STEPPER_IO_3_PIN);
					SET_IO_HIGH(STEPPER_IO_4_PORT, STEPPER_IO_4_PIN);
				}
				if(g_steps_stRegs.run.substate == 1){
					SET_IO_LOW(STEPPER_IO_1_PORT, STEPPER_IO_1_PIN);
					SET_IO_LOW(STEPPER_IO_2_PORT, STEPPER_IO_2_PIN);
					SET_IO_HIGH(STEPPER_IO_3_PORT, STEPPER_IO_3_PIN);
					SET_IO_LOW(STEPPER_IO_4_PORT, STEPPER_IO_4_PIN);
				}
				if(g_steps_stRegs.run.substate == 2){
					SET_IO_LOW(STEPPER_IO_1_PORT, STEPPER_IO_1_PIN);
					SET_IO_HIGH(STEPPER_IO_2_PORT, STEPPER_IO_2_PIN);
					SET_IO_LOW(STEPPER_IO_3_PORT, STEPPER_IO_3_PIN);
					SET_IO_LOW(STEPPER_IO_4_PORT, STEPPER_IO_4_PIN);
				}
				if(g_steps_stRegs.run.substate == 3){
					SET_IO_HIGH(STEPPER_IO_1_PORT, STEPPER_IO_1_PIN);
					SET_IO_LOW(STEPPER_IO_2_PORT, STEPPER_IO_2_PIN);
					SET_IO_LOW(STEPPER_IO_3_PORT, STEPPER_IO_3_PIN);
					SET_IO_LOW(STEPPER_IO_4_PORT, STEPPER_IO_4_PIN);
				}
			}
			g_steps_stRegs.run.substate ++;
			if(g_steps_stRegs.run.substate >= 4){
				g_steps_stRegs.run.substate = 0;
				g_steps_stRegs.run.state ++;
				if(g_steps_stRegs.run.state >= g_steps_stRegs.run.steps){
					g_steps_stRegs.run.running = FALSE;
					SET_IO_LOW(STEPPER_IO_1_PORT, STEPPER_IO_1_PIN);
					SET_IO_LOW(STEPPER_IO_2_PORT, STEPPER_IO_2_PIN);
					SET_IO_LOW(STEPPER_IO_3_PORT, STEPPER_IO_3_PIN);
					SET_IO_LOW(STEPPER_IO_4_PORT, STEPPER_IO_4_PIN);
				}
			}
		}
	}else{
	}
}

